package com.ayh.utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;

public class DtUtils {

	private static Date date = null;
	private static DateFormat dateFormat = null;
	private static Calendar calendar = null;

	public static final String StarTimeString = "00:00:00";
	public static final String StopTimeString = "23:59:59";
	public static final String format = "yyyy-MM-dd HH:mm:ss";
	public static final String format_date = "yyyy-MM-dd";
	public static final String format_time = "HH:mm:ss";
	public static final String format_timestamp = "yyyy-MM-dd HH:mm:ss.S";

	/**
	 * @描述 将自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数"
	 * @param date 日期
	 * @return 自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数，例如：1338393600
	 * */
	public synchronized static int DateToUTC(Date date) {
		long strdate = date.getTime() / 1000;
		return new Long(strdate).intValue();
	}

	/**
	 * @描述 将字符串"yyyy-MM-dd HH:mm:ss" 转换成 "自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数"
	 * @param dateStr 日期字符串
	 * @return 自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数，例如：1338393600
	 * */
	public synchronized static int StrToUTC(String dateStr) {
		Date date = parseDate(dateStr, format);
		return DateToUTC(date);
	}

	/**
	 * 功能描述：格式化日期
	 * @param dateStr String 字符型日期
	 * @param format String 格式
	 * @return Date 日期
	 */
	public static Date parseDate(String dateStr, String format) {
		try {
			dateFormat = new SimpleDateFormat(format);
			dateStr = formatDate(dateStr);
			if ((!dateStr.equals("")) && (dateStr.length() < format.length())) {
				dateStr += format.substring(dateStr.length()).replaceAll("[YyMmDdHhSs]", "0");
			}
			date = (Date) dateFormat.parse(dateStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 功能描述：格式化输出日期
	 * @param date Date 日期
	 * @param format String 格式
	 * @return 返回字符型日期
	 */
	public static String format(Date date, String format) {
		String result = "";
		try {
			if (date != null) {
				dateFormat = new SimpleDateFormat(format);
				result = dateFormat.format(date);
			}
		} catch (Exception e) {
		}
		return result;
	}

	/**
	 * 功能描述：返回年份
	 * @param date Date 日期
	 * @return 返回年份
	 */
	public static int getYear(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 功能描述：返回月份
	 * @param date Date 日期
	 * @return 返回月份
	 */
	public static int getMonth(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 功能描述：返回日份
	 * @param date Date 日期
	 * @return 返回日份
	 */
	public static int getDay(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 功能描述：返回小时
	 * @param date 日期
	 * @return 返回小时
	 */
	public static int getHour(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.HOUR_OF_DAY);
	}

	/**
	 * 功能描述：返回分钟
	 * @param date 日期
	 * @return 返回分钟
	 */
	public static int getMinute(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.MINUTE);
	}

	/**
	 * 返回秒钟
	 * @param date Date 日期
	 * @return 返回秒钟
	 */
	public static int getSecond(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.SECOND);
	}

	/**
	 * 功能描述：返回毫秒
	 * @param date 日期
	 * @return 返回毫秒
	 */
	public static long getMillis(Date date) {
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.getTimeInMillis();
	}

	/**
	 * 功能描述：返回字符型日期
	 * @param date 日期
	 * @param format String 格式
	 * @return 返回字符型日期
	 */
	public static String getDate(Date date, String format) {
		return format(date, format);
	}

	/**
	 * 功能描述：返回字符型日期 默认
	 * @param date 日期
	 * @return 返回字符型日期
	 */
	public static String getDate(Date date) {
		return format(date, format_date);
	}

	/**
	 * 功能描述：返回字符型时间
	 * @param date 日期
	 * @param format String 格式
	 * @return 返回字符型时间
	 */
	public static String getTime(Date date, String format) {
		return format(date, format);
	}

	/**
	 * 功能描述：返回字符型时间 默认
	 */
	public static String getTime(Date date) {
		return format(date, format_time);
	}

	/**
	 * 功能描述：返回字符型日期时间
	 * @param date 日期
	 * @param format String 格式
	 * @return 返回字符型日期时间
	 */
	public static String getDateTime(Date date, String format) {
		return format(date, format);
	}

	/**
	 * 功能描述：返回字符型日期时间 默认
	 * @param date 日期
	 * @return 返回字符型日期时间
	 */
	public static String getDateTime(Date date) {
		return format(date, format);
	}

	public static String getDateTime() {
		return format(new Date(), format);
	}

	/**
	 * 功能描述：取得指定月份的第一天
	 * @param strdate String 字符型日期
	 * @return String yyyy-MM-dd 格式
	 */
	public static String getMonthBegin(String strdate) {
		date = parseDate(strdate, format);
		return format(date, "yyyy-MM") + "-01";
	}

	/**
	 * 功能描述：取得指定月份的最后一天
	 * @param strdate String 字符型日期
	 * @return String 日期字符串 yyyy-MM-dd格式
	 */
	public static String getMonthEnd(String strdate) {
		date = parseDate(getMonthBegin(strdate), format);
		calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.MONTH, 1);
		calendar.add(Calendar.DAY_OF_YEAR, -1);
		return format(calendar.getTime(), format_date);
	}

	/**
	 * 功能描述：取得指定日期的起始时间
	 * @param strdate String 字符型日期
	 * @return String 日期字符串
	 */
	public static String getDateTimeBegin(String dateStr) {
		return formatDate(dateStr, format_date) + " " + DtUtils.StarTimeString;
	}

	/**
	 * 功能描述：取得指定日期的结束时间
	 * @param strdate String 字符型日期
	 * @return String 日期字符串
	 */
	public static String getDateTimeEnd(String dateStr) {
		return formatDate(dateStr, format_date) + " " + DtUtils.StopTimeString;
	}

	/**
	 * 功能描述：常用的格式化日期
	 * @param date Date 日期
	 * @param format String 格式
	 * @return String 日期字符串
	 */
	public static String formatDate(Date date) {
		return formatDate(date, format);
	}

	/**
	 * 功能描述：常用的格式化日期
	 * @param date String 日期
	 * @param format String 格式
	 * @return String 日期字符串
	 */
	public static String formatDate(String dateStr) {
		return formatDate(dateStr, format);
	}

	/**
	 * 功能描述：以指定的格式来格式化日期
	 * @param date Date 日期
	 * @param format String 格式
	 * @return String 日期字符串
	 */
	public static String formatDate(Date date, String format) {
		String result = "";
		if (date != null) {
			try {
				SimpleDateFormat sdf = new SimpleDateFormat(format);
				result = sdf.format(date);
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
		return result;
	}

	/**
	 * 功能描述：以指定的格式来格式化日期
	 * @param date String 日期
	 * @param format String 格式
	 * @return String 日期字符串
	 */
	public static String formatDate(String dateStr, String format) {
		return formatDateTime(dateStr, format);
	}

	/**
	 * @功能: 比较两个日期
	 * @param date2>date1 true
	 * @return boolean
	 */
	public static boolean compareDate(Date date1, Date date2) {
		boolean result = false;
		if (date1.getTime() > date2.getTime()) {
			result = false;
		} else if (date1.getTime() < date2.getTime()) {
			return true;
		}
		return result;
	}

	/**
	 * @功能: 不可用日期处理
	 * @param date2>date1 true
	 * @return boolean
	 */
	public static List<String> notimeString(String _sdate, String _edate, String dateformat, String[] w) {
		Calendar c_begin = new GregorianCalendar();
		Calendar c_end = new GregorianCalendar();

		Date sdate = DtUtils.parseDate(_sdate, DtUtils.format);
		Date edate = DtUtils.parseDate(_edate, DtUtils.format);

		c_begin.setTime(sdate);
		c_end.setTime(edate);

		c_end.add(Calendar.DAY_OF_YEAR, 1); // 结束日期下滚一天是为了包含最后一天

		List<String> list = new ArrayList<String>();
		while (c_begin.before(c_end)) {
			for (int i = 0; i < w.length; i++) {
				if (w[i].equals("0")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				} else if (w[i].equals("1")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				} else if (w[i].equals("2")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				} else if (w[i].equals("3")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				} else if (w[i].equals("4")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				} else if (w[i].equals("5")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				} else if (w[i].equals("6")) {
					if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
						list.add(new java.sql.Date(c_begin.getTime().getTime()) + "");
					}
				}
			}
			c_begin.add(Calendar.DAY_OF_YEAR, 1);
		}

		return list;
	}

	public static class DtObjTools {
		/**
		 * @功能: 获得下 N 个月的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期对象
		 */
		public static Date getNextMonth(Date date, int count) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.MONTH, count);
			return calendar.getTime();
		}

		/**
		 * 功能描述：获得下 N 个天的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期对象
		 */
		public static Date getNextDay(Date date, int count) {
			calendar = Calendar.getInstance();
			long millis = getMillis(date) + ((long) count) * 24 * 3600 * 1000;
			calendar.setTimeInMillis(millis);
			return calendar.getTime();
		}

		/**
		 * 功能描述：获得下 N 个时的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期对象
		 */
		public static Date getNextHour(Date date, int count) {
			calendar = Calendar.getInstance();
			long millis = getMillis(date) + ((long) count) * 3600 * 1000;
			calendar.setTimeInMillis(millis);
			return calendar.getTime();
		}

		/**
		 * 功能描述：获得下 N 个分的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期对象
		 */
		public static Date getNextMinute(Date date, int count) {
			calendar = Calendar.getInstance();
			long millis = getMillis(date) + ((long) count) * 60 * 1000;
			calendar.setTimeInMillis(millis);
			return calendar.getTime();
		}

		/**
		 * 功能描述：获得下 N 个秒的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期对象
		 */
		public static Date getNextSecond(Date date, int count) {
			calendar = Calendar.getInstance();
			long millis = getMillis(date) + ((long) count) * 1000;
			calendar.setTimeInMillis(millis);
			return calendar.getTime();
		}
	}

	public static class DtStrTools {
		/**
		 * @功能: 获得 N个月的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期字符串
		 */
		public static String getNextMonth(Date date, int count) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.MONTH, count);
			return formatDate(calendar.getTime(), format);
		}

		/**
		 * 功能描述：获得下N个天的时间对象
		 * @param date 起始时间
		 * @param count
		 * @return 日期字符串
		 */
		public static String getNextDay(Date date, int count) {
			calendar = Calendar.getInstance();
			long millis = getMillis(date) + ((long) count) * 24 * 3600 * 1000;
			calendar.setTimeInMillis(millis);
			return formatDate(calendar.getTime(), format);
		}

		/**
		 * @描述 当前时间之前N个小时
		 * @param date 起始时间
		 * @param count
		 * @return 日期字符串
		 */
		public static String getNextHour(Date date, int count) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.HOUR, count);
			return formatDate(calendar.getTime(), format);
		}

		/**
		 * @描述 当前时间之前N个分钟
		 * @param date 起始时间
		 * @param count
		 * @return 日期字符串
		 */
		public static String getNextMinute(Date date, int count) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.MINUTE, count);
			return formatDate(calendar.getTime(), format);
		}

		/**
		 * @描述 当前时间之前N个秒
		 * @param date 起始时间
		 * @param count
		 * @return 日期字符串
		 */
		public static String getNextSecond(Date date, int count) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.SECOND, count);
			return formatDate(calendar.getTime(), format);
		}
	}

	public static class DiffDateTool {

		/**
		 * @功能: 两个时间相差的月数
		 * @param date1
		 * @param date2
		 * @return int
		 */
		public static int diffDateMonth(Date date1, Date date2) {
			if (null == date1) {
				return -1;
			}
			if (null == date2) {
				return -1;
			}
			Calendar cal1 = new GregorianCalendar();
			cal1.setTime(date1);
			Calendar cal2 = new GregorianCalendar();
			cal2.setTime(date2);
			int diffMonth = (cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR)) * 12;
			diffMonth += cal1.get(Calendar.MONTH) - cal2.get(Calendar.MONTH);
			// return  diffMonth;
			return Math.abs(diffMonth);
		}

		/**
		 * 功能描述：日期相差天数
		 * @param date1 Date 日期
		 * @param date2 Date 日期
		 * @return int
		 */
		public static int diffDateDay(Date date1, Date date2) {
			if (null == date1) {
				return 0;
			}
			if (null == date2) {
				return 0;
			}
			int diffDay = (int) ((getMillis(date1) - getMillis(date2)) / (24 * 3600 * 1000));
			//return diffDay;
			return Math.abs(diffDay);
		}

		/**
		 * 功能描述：日期相差小时
		 * @param date1 Date 日期
		 * @param date2 Date 日期
		 * @return int
		 */
		public static int diffDateHour(Date date1, Date date2) {
			if (null == date1) {
				return 0;
			}
			if (null == date2) {
				return 0;
			}
			int diffDay = (int) ((getMillis(date1) - getMillis(date2)) / (3600 * 1000));
			//return diffDay;
			return Math.abs(diffDay);
		}

		/**
		 * 功能描述：日期相差分钟
		 * @param date1 Date 日期
		 * @param date2 Date 日期
		 * @return int
		 */
		public static int diffDateMinute(Date date1, Date date2) {
			if (null == date1) {
				return 0;
			}
			if (null == date2) {
				return 0;
			}
			int diffDay = (int) ((getMillis(date1) - getMillis(date2)) / (60 * 1000));
			//return diffDay;
			return Math.abs(diffDay);
		}

		/**
		 * 功能描述：日期相差分钟
		 * @param date1 Date 日期
		 * @param date2 Date 日期
		 * @return int
		 */
		public static int diffDateSecond(Date date1, Date date2) {
			if (null == date1) {
				return 0;
			}
			if (null == date2) {
				return 0;
			}
			int diffDay = (int) ((getMillis(date1) - getMillis(date2)) / 1000);
			//return diffDay;
			return Math.abs(diffDay);
		}

	}

	public static class DtWeeks {
		/**
		 * 获取日期所在周的日期集合
		 * @param date Date 日期
		 * @return HashMap key=0周一,1周二,2周三,3周四,4周五,5周六,6周日,7当前日期,8当前周
		 */
		public static HashMap<Integer, String> getWeeks(Date date) {
			return getWeeks(date, format_date);
		}

		/**
		 * 获取日期所在周的日期集合
		 * @param date Date 日期
		 * @param format String 格式
		 * @return HashMap key=0周一,1周二,2周三,3周四,4周五,5周六,6周日,7当前日期,8当前周
		 */
		public static HashMap<Integer, String> getWeeks(Date date, String format) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 2;
			calendar.add(Calendar.DATE, -dayOfWeek); // 得到本周的第一天
			HashMap<Integer, String> dateMap = new HashMap<Integer, String>();
			for (int i = 0; i < 7; i++) {
				dateMap.put(i, formatDate(calendar.getTime(), format));
				calendar.add(Calendar.DATE, 1);
			}
			dateMap.put(7, formatDate(date, format));

			int currentWeekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
			if (currentWeekOfYear == 1 && calendar.get(Calendar.MONTH) == 11) {
				currentWeekOfYear = 53;
			}

			calendar.add(Calendar.DATE, -dayOfWeek); // 得到本周的第一天
			calendar.add(Calendar.DATE, 6); // 得到本周的最后一天
			calendar.add(Calendar.DATE, -12); // 减去增加的日期

			dateMap.put(8, currentWeekOfYear + "");
			return dateMap;
		}

		/**
		 * 查询 当前日期是第几周
		 * @param date 日期
		 * @param week week=0指当前第几周,week>0 指前week周,week<0 指后week周
		 * @return
		 */
		public static String getWeeks(Date date, int week) {
			long myTime = (date.getTime() / 1000) - 60 * 60 * 24 * 7 * week;
			date.setTime(myTime * 1000);
			return new SimpleDateFormat("w").format(date);
		}

		/**
		 * 获取日历周几的int值
		 * 0,1,2,3,4,5,6
		 * @param date
		 * @return
		 */
		public static int getWeek(Date date) {
			calendar = Calendar.getInstance();
			calendar.setTime(date);
			return calendar.get(Calendar.DAY_OF_WEEK) - 1;
		}

		/**
		 * @功能: 根据日期查出当天是星期几
		 * @param date
		 * @param result 数字true还是字符串false
		 * @return str
		 */
		public static String getWeekStr(Date date) {
			final String weeksNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
			return weeksNames[getWeek(date)];
		}

	}

	/**
	 * 处理不同格式的日期
	 * @param dateStr
	 * @param format
	 * @return 日期字符串
	 */
	@SuppressWarnings("finally")
	private static String formatDateTime(String dateStr, String format) {
		HashMap<String, String> dateRegFormat = new HashMap<String, String>();
		//2014年3月12日 13时5分34秒，2014-03-12 12:05:34，2014/3/12 12:5:34
		dateRegFormat.put("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$", "yyyy-MM-dd-HH-mm-ss");
		dateRegFormat.put("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$", "yyyy-MM-dd-HH-mm");//2014年3月12日 13时5分
		dateRegFormat.put("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$", "yyyy-MM-dd-HH");//2014年3月12日 13时
		dateRegFormat.put("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$", "yyyy-MM-dd");//2014年3月12日
		dateRegFormat.put("^\\d{4}\\D+\\d{1,2}\\D*$", "yyyy-MM");//2014年3月
		dateRegFormat.put("^\\d{4}\\D*$", "yyyy");//2014年
		dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd-HH-mm");//2014-03-12 12:05
		dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd-HH");//2014-03-12 12
		dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd");//2014-03-12
		dateRegFormat.put("^\\d{4}\\D+\\d{2}$", "yyyy-MM");//2014-03
		dateRegFormat.put("^\\d{4}$", "yyyy");//2014
		dateRegFormat.put("^\\d{14}$", "yyyyMMddHHmmss");//20140312120534
		dateRegFormat.put("^\\d{12}$", "yyyyMMddHHmm");//201403121205
		dateRegFormat.put("^\\d{10}$", "yyyyMMddHH");//2014031212
		dateRegFormat.put("^\\d{8}$", "yyyyMMdd");//20140312
		dateRegFormat.put("^\\d{6}$", "yyyyMM");//201403
		dateRegFormat.put("^\\d{2}\\s*:\\s*\\d{2}\\s*:\\s*\\d{2}$", "yyyy-MM-dd-HH-mm-ss");//13:05:34  拼接当前日期
		dateRegFormat.put("^\\d{2}\\s*:\\s*\\d{2}$", "yyyy-MM-dd-HH-mm");//13:05  拼接当前日期
		dateRegFormat.put("^\\d{2}\\D+\\d{1,2}\\D+\\d{1,2}$", "yy-MM-dd");//14.10.18(年.月.日)
		dateRegFormat.put("^\\d{1,2}\\D+\\d{1,2}$", "yyyy-dd-MM");//30.12(日.月) 拼接当前年份
		dateRegFormat.put("^\\d{1,2}\\D+\\d{1,2}\\D+\\d{4}$", "dd-MM-yyyy");//12.21.2013(日.月.年)

		String curDate = getDate(new Date());
		dateFormat = new SimpleDateFormat(format);
		DateFormat formatter;
		String dateReplace;
		String strSuccess = "";
		try {
			for (String key : dateRegFormat.keySet()) {
				if (Pattern.compile(key).matcher(dateStr).matches()) {
					formatter = new SimpleDateFormat(dateRegFormat.get(key));
					if (key.equals("^\\d{2}\\s*:\\s*\\d{2}\\s*:\\s*\\d{2}$") || key.equals("^\\d{2}\\s*:\\s*\\d{2}$")) {
						//13:05:34 或 13:05 拼接当前日期
						dateStr = curDate + "-" + dateStr;
					} else if (key.equals("^\\d{1,2}\\D+\\d{1,2}$")) {//21.1 (日.月) 拼接当前年份
						dateStr = curDate.substring(0, 4) + "-" + dateStr;
					}
					dateReplace = dateStr.replaceAll("\\D+", "-");

					strSuccess = dateFormat.format(formatter.parse(dateReplace));
					break;
				}
			}
		} catch (Exception e) {
			throw new Exception("日期格式无效:" + dateStr);
		} finally {
			return strSuccess;
		}
	}
}
